package com.ilxqx.generator.config;

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;

@Data
@Slf4j
public class ConfigProperties {

    public static final ConfigProperties INSTANCE;

    static {
        URL resource = ConfigProperties.class.getClassLoader().getResource("config.json");
        if (resource == null) {
            throw new RuntimeException("找不到配置文件【config.json】");
        }
        log.info("找到配置文件config.json，开始加载配置文件");
        String config;
        try {
            config = FileUtils.readFileToString(new File(resource.toURI()), StandardCharsets.UTF_8);
        } catch (Exception e) {
            log.error("读取配置文件出现错误：", e);
            throw new RuntimeException("配置文件加载错误");
        }
        INSTANCE = JSON.parseObject(config, ConfigProperties.class);
    }

    /**
     * 数据库连接URL
     */
    private String url;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 数据库
     */
    private String database;

    /**
     * 项目包
     */
    private String basePackage;

    /**
     * 绝对类路径
     */
    private String absoluteClassPath;

    /**
     * 数据模型处理器
     */
    private List<String> dataProcessors;

    /**
     * 模板列表
     */
    private List<Template> templates;

    /**
     * 生成表列表
     */
    private List<String> tables;

    /**
     * 模板类
     */
    @Data
    public static class Template {

        /**
         * 模板名称
         */
        private String templateName;

        /**
         * 模板路径
         */
        private String templatePath;

        /**
         * 类的子包路径
         */
        private String subPackage;

        /**
         * 生成类的文件名
         */
        private String fileName;

    }

}
